ããã³ããšã³ãã¹ããªãŒãã³ã°ã¢ãŒããã¯ãã£ã®è€éããæ¢æ±ããããŒã¿ãããŒã管çããã¹ã ãŒãºã§å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãä¿èšŒããããã®å¹æçãªããã¯ãã¬ãã·ã£ãŒæŠç¥ãå®è£ ããæ¹æ³ã解説ã
ããã³ããšã³ãã¹ããªãŒãã³ã°ã¢ãŒããã¯ãã£ã®ããã¯ãã¬ãã·ã£ãŒïŒãããŒå¶åŸ¡ã®å®è£
ææ°ã®Webã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã¹ããªãŒãã³ã°ããŒã¿ããŸããŸãæ®åããŠããŸãããªã¢ã«ã¿ã€ã ã®æŽæ°ãã©ã€ããããªãã£ãŒãããããã©ãŠã¶ã§åŠçããã倧éã®ããŒã¿ã»ãããŸã§ãã¹ããªãŒãã³ã°ã¢ãŒããã¯ãã£ã¯ãç¶ç¶çãªããŒã¿ãããŒãåŠçããããã®åŒ·åãªæ¹æ³ãæäŸããŸãããã ããé©åãªç®¡çãªãã§ã¯ããããã®ã¹ããªãŒã ãããã³ããšã³ããå§åããããã©ãŒãã³ã¹ã®åé¡ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®äœäžã«ã€ãªããå¯èœæ§ããããŸããããã§ããã¯ãã¬ãã·ã£ãŒã®åºçªã§ãããã®èšäºã§ã¯ãããã³ããšã³ãã¹ããªãŒãã³ã°ã¢ãŒããã¯ãã£ã«ãããããã¯ãã¬ãã·ã£ãŒã®æŠå¿µãæãäžããã¹ã ãŒãºã§å¹ççãªããŒã¿ãããŒã確ä¿ããããã®ããŸããŸãªå®è£ æè¡ãšãã¹ããã©ã¯ãã£ã¹ãæ¢ããŸãã
ããã³ããšã³ãã¹ããªãŒãã³ã°ã¢ãŒããã¯ãã£ã®çè§£
ããã¯ãã¬ãã·ã£ãŒãæãäžããåã«ãããã³ããšã³ãã¹ããªãŒãã³ã°ã¢ãŒããã¯ãã£ãã©ã®ãããªãã®ãããã®åºç€ã確ç«ããŸãããããã®æ žå¿ã¯ãããŒã¿ã»ããå šäœãäžåºŠã«ã¡ã¢ãªã«ããŒãããããšãªãããããã¥ãŒãµãŒïŒéåžžã¯ããã¯ãšã³ããµãŒããŒïŒããã³ã³ã·ã¥ãŒããŒïŒããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ïŒã«ããŒã¿ãç¶ç¶çã«ã¹ããªãŒã ãšããŠè»¢éããããšã§ããããã¯ãåŠçãéå§ããåã«å¿çå šäœãåä¿¡ããå¿ èŠãããåŸæ¥ã®èŠæ±å¿çã¢ãã«ãšã¯å¯Ÿç §çã§ãã
ããã³ããšã³ãã¹ããªãŒãã³ã°ã¢ãŒããã¯ãã£ã®äž»èŠã³ã³ããŒãã³ãã«ã¯ã次ã®ãã®ããããŸãã
- ãããã¥ãŒãµãŒïŒããŒã¿ã¹ããªãŒã ã®ãœãŒã¹ãããã¯ããµãŒããŒåŽã®APIãšã³ããã€ã³ããWebSocketæ¥ç¶ããŸãã¯éåæçã«èªã¿åãããããŒã«ã«ãã¡ã€ã«ãªã©ã§ãã
- ã³ã³ã·ã¥ãŒããŒïŒããŒã¿ã¹ããªãŒã ã®åŠçãšè¡šç€ºãæ åœããããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ãããã«ã¯ãUIã®æŽæ°ã®ã¬ã³ããªã³ã°ãèšç®ã®å®è¡ããŸãã¯ããŒã¿ã®ããŒã«ã«ä¿åãªã©ãå«ãŸããŸãã
- ã¹ããªãŒã ïŒãããã¥ãŒãµãŒããã³ã³ã·ã¥ãŒããŒã«ããŒã¿ãæµãããã£ãã«ãããã¯ãWebSocketãServer-Sent EventsïŒSSEïŒããŸãã¯Web Streams APIãªã©ã®ããŸããŸãªãã¯ãããžãŒã䜿çšããŠå®è£ ã§ããŸãã
å®éã®äŸãèããŠã¿ãŸããããã©ã€ãã®æ ªåŒãã£ãã«ãŒã¢ããªã±ãŒã·ã§ã³ãããã¯ãšã³ããµãŒããŒïŒãããã¥ãŒãµãŒïŒã¯ãWebSocketæ¥ç¶ïŒã¹ããªãŒã ïŒãä»ããŠãæ ªäŸ¡ãç¶ç¶çã«ããã³ããšã³ãïŒã³ã³ã·ã¥ãŒããŒïŒã«ããã·ã¥ããŸããæ¬¡ã«ãããã³ããšã³ãã¯ãææ°ã®äŸ¡æ Œãåæ ããããã«UIããªã¢ã«ã¿ã€ã ã§æŽæ°ããŸããé©åãªãããŒå¶åŸ¡ããªããšãæ ªäŸ¡ã®æŽæ°ãæ¥å¢ãããšãããã³ããšã³ããå§åãããå¿çããªããªãå¯èœæ§ããããŸãã
ããã¯ãã¬ãã·ã£ãŒã®åé¡
ããã¯ãã¬ãã·ã£ãŒã¯ãã³ã³ã·ã¥ãŒããŒããããã¥ãŒãµãŒãããŒã¿ãéä¿¡ããé床ã«è¿œãã€ããªãå Žåã«çºçããŸãããã®äžäžèŽã¯ãããã€ãã®åé¡ã«ã€ãªããå¯èœæ§ããããŸãã
- ã¡ã¢ãªãªãŒããŒãããŒïŒã³ã³ã·ã¥ãŒããŒããããã¥ãŒãµãŒãããé ãå ŽåãããŒã¿ããããã¡ã«èç©ããæçµçã«ã¡ã¢ãªäžè¶³ãšã¢ããªã±ãŒã·ã§ã³ã¯ã©ãã·ã¥ã«ã€ãªãããŸãã
- ããã©ãŒãã³ã¹ã®äœäžïŒã¡ã¢ãªãªãŒããŒãããŒã®åã§ãããã³ã³ã·ã¥ãŒããŒã¯åä¿¡ããŒã¿ã¹ããªãŒã ã®åŠçã«èŠåŽãããããããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããŸããããã«ãããUIã®æŽæ°ãé ãããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœäžãããããå¯èœæ§ããããŸãã
- ããŒã¿ã®æå€±ïŒå Žåã«ãã£ãŠã¯ãã³ã³ã·ã¥ãŒããŒã远ãã€ãããã«åã«ããŒã¿ãã±ãããããããããäžå®å šãŸãã¯äžæ£ç¢ºãªæ å ±ããŠãŒã¶ãŒã«è¡šç€ºãããå¯èœæ§ããããŸãã
ãããªã¹ããªãŒãã³ã°ã¢ããªã±ãŒã·ã§ã³ãæ³åããŠãã ããããŠãŒã¶ãŒã®ã€ã³ã¿ãŒãããæ¥ç¶ãé ãããããã€ã¹ã®åŠçèœåãå¶éãããŠããå Žåãããã³ããšã³ãã¯ãããªãã¬ãŒã ãååã«éããã³ãŒãããŠã¬ã³ããªã³ã°ã§ããªãå¯èœæ§ããããŸããããã¯ãã¬ãã·ã£ãŒããªããšããããªãã¬ãŒã€ãŒãéå°ã«ãããã¡ãªã³ã°ããã¹ã¿ãã¿ãŒãé å»¶ãçºçããå¯èœæ§ããããŸãã
ããã¯ãã¬ãã·ã£ãŒæŠç¥ïŒè©³çްãªåæ
ããã¯ãã¬ãã·ã£ãŒã¯ãã³ã³ã·ã¥ãŒããŒãçŸåšã®ããŒã¿ãããŒã®é床ãåŠçã§ããªãããšããããã¥ãŒãµãŒã«éç¥ã§ããã¡ã«ããºã ã§ããæ¬¡ã«ããããã¥ãŒãµãŒã¯ããã«å¿ããŠéä¿¡é床ã調æŽã§ããŸããããã³ããšã³ãã¹ããªãŒãã³ã°ã¢ãŒããã¯ãã£ã§ããã¯ãã¬ãã·ã£ãŒãå®è£ ããã«ã¯ãããã€ãã®æ¹æ³ããããŸãã
1. æç€ºçãªç¢ºèªïŒACK/NACKïŒ
ãã®æŠç¥ã§ã¯ãã³ã³ã·ã¥ãŒããŒãåä¿¡ããåããŒã¿ãã±ãããæç€ºçã«ç¢ºèªããŸããã³ã³ã·ã¥ãŒããŒãéè² è·ã®å ŽåãåŠå®çãªç¢ºèªïŒNACKïŒãéä¿¡ããŠããããã¥ãŒãµãŒã«é床ãèœãšãããããŒã¿ãåéä¿¡ããããã«éç¥ã§ããŸãããã®ã¢ãããŒãã¯ãããŒã¿ãããŒã现ããå¶åŸ¡ã§ããŸãããåãã±ããã®åæ¹åéä¿¡ãå¿ èŠãªããã倧ããªãªãŒããŒãããã远å ãããå¯èœæ§ããããŸãã
äŸïŒéèååŒãåŠçããããã®ã·ã¹ãã ãæ³åããŠãã ãããããã¯ãšã³ãããéä¿¡ãããåãã©ã³ã¶ã¯ã·ã§ã³ã¯ãããã³ããšã³ãã«ãã£ãŠç¢ºå®ã«åŠçãããå¿ èŠããããŸããACK/NACKã䜿çšãããšãããã³ããšã³ãã¯åãã©ã³ã¶ã¯ã·ã§ã³ã確èªããé«è² è·æã§ãããŒã¿ã®æå€±ããªãããšãä¿èšŒããŸãããã©ã³ã¶ã¯ã·ã§ã³ãåŠçã«å€±æããå ŽåïŒããšãã°ãæ€èšŒãšã©ãŒãåå ïŒãNACKãéä¿¡ãããããã¯ãšã³ãã¯ãã©ã³ã¶ã¯ã·ã§ã³ãå詊è¡ããããã«æ±ããããŸãã
2. ã¬ãŒãå¶é/ã¹ããããªã³ã°ã«ãããããã¡ãªã³ã°
ãã®æŠç¥ã§ã¯ãã³ã³ã·ã¥ãŒããŒã¯åä¿¡ããŒã¿ãã±ããããããã¡ãªã³ã°ããå¶åŸ¡ãããã¬ãŒãã§åŠçããŸããããã¯ãã¬ãŒãå¶éãã¹ããããªã³ã°ãªã©ã®ææ³ã䜿çšããŠå®çŸã§ããŸããã¬ãŒãå¶éã¯ãç¹å®ã®æéæ å ã§çºçããã€ãã³ãã®æ°ãå¶éããã¹ããããªã³ã°ã¯ãæå®ãããééã«åºã¥ããŠã€ãã³ãã®å®è¡ãé å»¶ãããŸãã
äŸïŒããã¥ã¡ã³ããšãã£ã¿ãŒã®èªåä¿åæ©èœãèããŠã¿ãŸãããããã¹ãŠã®ããŒã¹ãããŒã¯ã®åŸïŒå§åãããå¯èœæ§ããããŸãïŒã«ããã¥ã¡ã³ããä¿åããã®ã§ã¯ãªããããã³ããšã³ãã¯å€æŽããããã¡ãªã³ã°ããã¹ããããªã³ã°ã¡ã«ããºã ã䜿çšããŠæ°ç§ããšã«ä¿åã§ããŸããããã«ãããããã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸãããããã¯ãšã³ãã®è² è·ã軜æžãããŸãã
ã³ãŒãäŸïŒRxJSã¹ããããªã³ã°ïŒïŒ
const input$ = fromEvent(document.getElementById('myInput'), 'keyup');
input$.pipe(
map(event => event.target.value),
throttleTime(500) // Only emit the latest value every 500ms
).subscribe(value => {
// Send the value to the backend for saving
console.log('Saving:', value);
});
3. ãµã³ããªã³ã°/ãããŠã³ã¹
ã¹ããããªã³ã°ãšåæ§ã«ããµã³ããªã³ã°ãšãããŠã³ã¹ã䜿çšããŠãã³ã³ã·ã¥ãŒããŒãããŒã¿ãåŠçããé床ãäžããããšãã§ããŸãããµã³ããªã³ã°ã¯ãç¹å®ã®æéééã§ããŒã¿ãã±ãããåŠçããããšãå«ã¿ããããŠã³ã¹ã¯ãç¹å®ã®æéã®éã¢ã¯ãã£ããã£ãçµéãããŸã§ããŒã¿ãã±ããã®åŠçãé å»¶ãããŸããããã¯ãé »ç¹ã«çºçããæ¥éã«é£ç¶ããŠçºçããã€ãã³ããåŠçããå Žåã«ç¹ã«åœ¹ç«ã¡ãŸãã
äŸïŒã¿ã€ãã¢ã·ã¹ãæ€çŽ¢æ©èœãèããŠã¿ãŸããããããã³ããšã³ãã¯ããã¹ãŠã®ããŒã¹ãããŒã¯åŸã«æ€çŽ¢ãªã¯ãšã¹ããéä¿¡ããå¿ èŠã¯ãããŸããã代ããã«ããããŠã³ã¹ã䜿çšããŠããŠãŒã¶ãŒãçæéïŒããšãã°ã300msïŒã¿ã€ãã³ã°ã忢ãããŸã§åŸ ã£ãŠããããªã¯ãšã¹ããéä¿¡ã§ããŸããããã«ãããäžèŠãªAPIåŒã³åºãã®æ°ãå€§å¹ ã«åæžãããŸãã
ã³ãŒãäŸïŒRxJSãããŠã³ã¹ïŒïŒ
const input$ = fromEvent(document.getElementById('myInput'), 'keyup');
input$.pipe(
map(event => event.target.value),
debounceTime(300) // Wait 300ms after the last keyup event
).subscribe(value => {
// Send the value to the backend for searching
console.log('Searching:', value);
});
4. ãŠã£ã³ããŠå/ãããåŠç
ãã®æŠç¥ã§ã¯ãè€æ°ã®ããŒã¿ãã±ãããåäžã®ãããã«ã°ã«ãŒãåããŠããåŠçããŸããããã«ãããåã ã®ãã±ããã®åŠçã«é¢é£ãããªãŒããŒããããæžãããå šäœçãªããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãããŠã£ã³ããŠåã¯ãæéããŒã¹ïŒç¹å®ã®æéæ å ã®ãã±ããã®ã°ã«ãŒãåïŒãŸãã¯ã«ãŠã³ãããŒã¹ïŒåºå®æ°ã®ãã±ããã®ã°ã«ãŒãåïŒã«ããããšãã§ããŸãã
äŸïŒãã°éçŽã·ã¹ãã ãèããŠã¿ãŸããããåãã°ã¡ãã»ãŒãžãåå¥ã«ããã¯ãšã³ãã«éä¿¡ãã代ããã«ãããã³ããšã³ãã¯ãããããã倧ããªã°ã«ãŒãã«ãããåŠçãã宿çã«éä¿¡ã§ããŸããããã«ããããããã¯ãŒã¯ãªã¯ãšã¹ãã®æ°ãæžãããã°åã蟌ã¿ããã»ã¹ã®å¹çãåäžããŸãã
5. ã³ã³ã·ã¥ãŒããŒäž»å°ã®ãããŒå¶åŸ¡ïŒãªã¯ãšã¹ãããŒã¹ïŒ
ãã®ã¢ãããŒãã§ã¯ãã³ã³ã·ã¥ãŒããŒã¯ãåŠçã§ããé床ã§ãããã¥ãŒãµãŒã«æç€ºçã«ããŒã¿ãèŠæ±ããŸããããã¯ãããŒãžããŒã·ã§ã³ãç¡éã¹ã¯ããŒã«ãªã©ã®ææ³ã䜿çšããŠå®è£ ãããããšããããããŸããã³ã³ã·ã¥ãŒããŒã¯ãåŠçããæºåãã§ããŠããå Žåã«ã®ã¿ã次ã®ããŒã¿ãããããã§ããããŸãã
äŸïŒå€ãã®eã³ããŒã¹Webãµã€ãã¯ãååã®å€§èŠæš¡ãªã«ã¿ãã°ã衚瀺ããããã«ããŒãžããŒã·ã§ã³ã䜿çšããŠããŸããããã³ããšã³ãã¯ãäžåºŠã«å°æ°ã®ååã®ã¿ããã§ããããããããåäžã®ããŒãžã«è¡šç€ºããŸãããŠãŒã¶ãŒã次ã®ããŒãžã«ç§»åãããšãããã³ããšã³ãã¯ããã¯ãšã³ãããæ¬¡ã®ååããããèŠæ±ããŸãã
6. ãªã¢ã¯ãã£ãããã°ã©ãã³ã°ïŒRxJSãWeb Streams APIïŒ
ãªã¢ã¯ãã£ãããã°ã©ãã³ã°ã¯ãéåæããŒã¿ã¹ããªãŒã ãåŠçããããã¯ãã¬ãã·ã£ãŒãå®è£ ããããã®åŒ·åãªãã©ãã€ã ãæäŸããŸããRxJSãWeb Streams APIãªã©ã®ã©ã€ãã©ãªã¯ãããŒã¿ãããŒã管çããããã¯ãã¬ãã·ã£ãŒãåŠçããããã®çµã¿èŸŒã¿ã¡ã«ããºã ãæäŸããŸãã
RxJSïŒRxJSã¯ãéåæããŒã¿ã¹ããªãŒã ã衚ãããã«Observableã䜿çšããŸãã`throttleTime`ã`debounceTime`ã`buffer`ã`sample`ãªã©ã®æŒç®åã䜿çšããŠãããŸããŸãªããã¯ãã¬ãã·ã£ãŒæŠç¥ãå®è£ ã§ããŸããããã«ãRxJSã¯ããšã©ãŒãåŠçããã¹ããªãŒã ãé©åã«å®äºããããã®ã¡ã«ããºã ãæäŸããŸãã
Web Streams APIïŒWeb Streams APIã¯ãã¹ããªãŒãã³ã°ããŒã¿ãæäœããããã®ãã€ãã£ãJavaScriptã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸããããã«ã¯ãçµã¿èŸŒã¿ã®ããã¯ãã¬ãã·ã£ãŒãµããŒãã䜿çšããŠããŒã¿ã¹ããªãŒã ãäœæããã³æäœã§ãã`ReadableStream`ã`WritableStream`ãããã³`TransformStream`ãªã©ã®æŠå¿µãå«ãŸããŸãã`ReadableStream`ã¯ãïŒ`pull`ã¡ãœãããä»ããŠïŒããå€ãã®ããŒã¿ãåä¿¡ããæºåãã§ããŠããå Žåã«ãããã¥ãŒãµãŒã«éç¥ã§ããŸãã
ã³ãŒãäŸïŒWeb Streams APIïŒïŒ
async function fetchStream(url) {
const response = await fetch(url);
const reader = response.body.getReader();
return new ReadableStream({
start(controller) {
function push() {
reader.read().then(({ done, value }) => {
if (done) {
controller.close();
return;
}
controller.enqueue(value);
push();
});
}
push();
},
pull(controller) { // Backpressure mechanism
// Optional: Implement logic to control the rate at which data is pulled
// from the stream.
},
cancel() {
reader.cancel();
}
});
}
async function processStream(stream) {
const reader = stream.getReader();
try {
while (true) {
const { done, value } = await reader.read();
if (done) {
break;
}
// Process the data chunk (value)
console.log('Received:', new TextDecoder().decode(value));
}
} finally {
reader.releaseLock();
}
}
// Example usage:
fetchStream('/my-streaming-endpoint')
.then(stream => processStream(stream));
é©åãªããã¯ãã¬ãã·ã£ãŒæŠç¥ã®éžæ
æé©ãªããã¯ãã¬ãã·ã£ãŒæŠç¥ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®èŠä»¶ã«ãã£ãŠç°ãªããŸããæ¬¡ã®èŠçŽ ãèæ ®ããŠãã ããã
- ããŒã¿ã®æ©å¯æ§ïŒããŒã¿ã®æå€±ãåãå ¥ããããªãå ŽåïŒäŸïŒéèååŒïŒãæç€ºçãªç¢ºèªãŸãã¯å ç¢ãªãããã¡ãªã³ã°ã¡ã«ããºã ãå¿ èŠã§ãã
- ããã©ãŒãã³ã¹èŠä»¶ïŒäœé å»¶ãéèŠã§ããå ŽåïŒäŸïŒãªã¢ã«ã¿ã€ã ã²ãŒã ïŒãã¹ããããªã³ã°ããµã³ããªã³ã°ãªã©ã®æŠç¥ã¯ãåãå ¥ããããªãé å»¶ãå°å ¥ããå¯èœæ§ããããŸãã
- è€éãïŒæç€ºçãªç¢ºèªã¯ãã¬ãŒãå¶éãªã©ã®ããåçŽãªæŠç¥ãããå®è£ ãè€éã«ãªãå¯èœæ§ããããŸãã
- åºç€ãšãªããã¯ãããžãŒïŒäžéšã®ãã¯ãããžãŒïŒäŸïŒWeb Streams APIïŒã¯ãçµã¿èŸŒã¿ã®ããã¯ãã¬ãã·ã£ãŒãµããŒããæäŸããŸãããä»ã®ãã¯ãããžãŒã§ã¯ãã«ã¹ã¿ã å®è£ ãå¿ èŠã«ãªãå ŽåããããŸãã
- ãããã¯ãŒã¯ã®ç¶æ ïŒä¿¡é Œæ§ã®äœããããã¯ãŒã¯ã§ã¯ããã±ããæå€±ãšåéä¿¡ãåŠçããããã«ãããå ç¢ãªããã¯ãã¬ãã·ã£ãŒã¡ã«ããºã ãå¿ èŠã«ãªãå ŽåããããŸããå詊è¡ã®ææ°ããã¯ãªãæŠç¥ã®å®è£ ãæ€èšããŠãã ããã
ããã¯ãã¬ãã·ã£ãŒãå®è£ ããããã®ãã¹ããã©ã¯ãã£ã¹
- ããã©ãŒãã³ã¹ã®ç£èŠïŒæœåšçãªããã¯ãã¬ãã·ã£ãŒã®åé¡ãç¹å®ããããã«ãããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠããŸããCPU䜿çšçãã¡ã¢ãªæ¶è²»éãUIã®å¿çæ§ãªã©ã®ã¡ããªãã¯ã䜿çšããŠãæéã®çµéãšãšãã«ããã©ãŒãã³ã¹ã远跡ããŸãã
- 培åºçãªãã¹ãïŒããŸããŸãªè² è·æ¡ä»¶äžã§ããã¯ãã¬ãã·ã£ãŒã®å®è£ ããã¹ãããŠãããŒã¯ãã©ãã£ãã¯ãšäºæããªãããŒã¿ãµãŒãžãåŠçã§ããããšã確èªããŸããè² è·ãã¹ãããŒã«ã䜿çšããŠãçŸå®çãªãŠãŒã¶ãŒã®åäœãã·ãã¥ã¬ãŒãããŸãã
- ãšã©ãŒãé©åã«åŠçããïŒããŒã¿ã¹ããªãŒã ã§äºæããªããšã©ãŒãé©åã«åŠçããããã«ãå ç¢ãªãšã©ãŒåŠçãå®è£ ããŸããããã«ã¯ã倱æãããªã¯ãšã¹ãã®å詊è¡ããŠãŒã¶ãŒãžã®æ å ±ãšã©ãŒã¡ãã»ãŒãžã®è¡šç€ºããŸãã¯ã¹ããªãŒã ã®é©åãªã©ããã ããªã©ããããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãèæ ®ããïŒããã©ãŒãã³ã¹ã®æé©åãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®ãã©ã³ã¹ãåããŸããé å»¶ãããŒã¿ã®æå€±ã«ã€ãªããå¯èœæ§ã®ããé床ã«ç©æ¥µçãªããã¯ãã¬ãã·ã£ãŒæŠç¥ãåé¿ããŸããããŒã¿ãåŠçãããŠããããšã瀺ãèŠèŠçãªãã£ãŒãããã¯ããŠãŒã¶ãŒã«æäŸããŸãã
- ãã®ã³ã°ãšãããã°ãå®è£ ããïŒããã¯ãã¬ãã·ã£ãŒã®åé¡ã®èšºæã«åœ¹ç«ãŠãããã«ã詳现ãªãã®ã³ã°ãããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã«è¿œå ããŸããã¿ã€ã ã¹ã¿ã³ããããŒã¿ãµã€ãºããšã©ãŒã¡ãã»ãŒãžããã°ã«å«ããŸãããããã°ããŒã«ã䜿çšããŠãããŒã¿ã¹ããªãŒã ãæ€æ»ããããã«ããã¯ãç¹å®ããŸãã
- 確ç«ãããã©ã€ãã©ãªã䜿çšããïŒãªã¢ã¯ãã£ãããã°ã©ãã³ã°ã«ã¯RxJSããã€ãã£ãã¹ããªãŒãã³ã°ãµããŒãã«ã¯Web Streams APIãªã©ãååã«ãã¹ããããæé©åãããã©ã€ãã©ãªã掻çšããŸããããã«ãããéçºæéãç¯çŽãããã°ãçºçãããªã¹ã¯ã軜æžã§ããŸãã
- ããŒã¿ã®ã·ãªã¢ã«å/ãã·ãªã¢ã«åãæé©åããïŒProtocol BuffersãMessagePackãªã©ã®å¹ççãªããŒã¿åœ¢åŒã䜿çšããŠããããã¯ãŒã¯çµç±ã§éä¿¡ãããããŒã¿ãã±ããã®ãµã€ãºãæå°éã«æããŸããããã«ãããããã©ãŒãã³ã¹ãåäžããããã³ããšã³ããžã®è² æ ã軜æžãããŸãã
é«åºŠãªèæ ®äºé
- ãšã³ãããŒãšã³ãããã¯ãã¬ãã·ã£ãŒïŒçæ³çãªãœãªã¥ãŒã·ã§ã³ã«ã¯ããããã¥ãŒãµãŒããã³ã³ã·ã¥ãŒããŒãŸã§ãããŒã¿ãã€ãã©ã€ã³å šäœã«å®è£ ãããããã¯ãã¬ãã·ã£ãŒã¡ã«ããºã ãå«ãŸããŸããããã«ãããããã¯ãã¬ãã·ã£ãŒä¿¡å·ãã¢ãŒããã¯ãã£ã®ãã¹ãŠã®å±€ã«å¹æçã«äŒæããããšãä¿èšŒãããŸãã
- é©å¿åããã¯ãã¬ãã·ã£ãŒïŒãªã¢ã«ã¿ã€ã ã®æ¡ä»¶ã«åºã¥ããŠããŒã¿ãããŒã¬ãŒããåçã«èª¿æŽããé©å¿åããã¯ãã¬ãã·ã£ãŒæŠç¥ãå®è£ ããŸããããã«ã¯ãæ©æ¢°åŠç¿æè¡ã䜿çšããŠå°æ¥ã®ããŒã¿ã¬ãŒããäºæž¬ããããã«å¿ããŠããã¯ãã¬ãã·ã£ãŒãã©ã¡ãŒã¿ã調æŽããããšãå«ãŸããŸãã
- ãµãŒããããã¬ãŒã«ãŒïŒé£éçãªé害ãé²ãããã«ããµãŒããããã¬ãŒã«ãŒãã¿ãŒã³ãå®è£ ããŸããã³ã³ã·ã¥ãŒããŒãããŒã¿åŠçã«äžè²«ããŠå€±æããŠããå ŽåããµãŒããããã¬ãŒã«ãŒã¯ããããªãæå·ãé²ãããã«ã¹ããªãŒã ãäžæçã«åæ¢ã§ããŸãã
- å§çž®ïŒãããã¯ãŒã¯çµç±ã§ããŒã¿ãéä¿¡ããåã«ããŒã¿ãå§çž®ããŠã垯åå¹ ã®äœ¿çšéãæžãããããã©ãŒãã³ã¹ãåäžãããŸããgzipãŸãã¯Brotliãªã©ã®å§çž®ã¢ã«ãŽãªãºã ã®äœ¿çšãæ€èšããŠãã ããã
çµè«
ããã¯ãã¬ãã·ã£ãŒã¯ããã¹ãŠã®ããã³ããšã³ãã¹ããªãŒãã³ã°ã¢ãŒããã¯ãã£ã§éèŠãªèæ ®äºé ã§ãã广çãªããã¯ãã¬ãã·ã£ãŒæŠç¥ãå®è£ ããããšã§ãããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ãããã©ãŒãã³ã¹ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæãªãããšãªããç¶ç¶çãªããŒã¿ãããŒãåŠçã§ããããšã確èªã§ããŸããã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®èŠä»¶ãæ éã«æ€èšãã培åºçãªãã¹ããšç£èŠãè¡ãããšã§ããŠãŒã¶ãŒã«ã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸãããå ç¢ã§ã¹ã±ãŒã©ãã«ãªã¹ããªãŒãã³ã°ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸããããŒã¿ã®æ©å¯æ§ãããã©ãŒãã³ã¹ã®ããŒãºãããã³äœ¿çšãããŠããåºç€ãšãªããã¯ãããžãŒã«åºã¥ããŠãé©åãªæŠç¥ãéžæããããšãå¿ããªãã§ãã ããããªã¢ã¯ãã£ãããã°ã©ãã³ã°ãã©ãã€ã ãæ¡çšããRxJSãWeb Streams APIãªã©ã®ã©ã€ãã©ãªã掻çšããŠãè€éãªããã¯ãã¬ãã·ã£ãŒã·ããªãªã®å®è£ ãç°¡çŽ åããŸãã
ãããã®äž»èŠãªåŽé¢ã«çŠç¹ãåœãŠãããšã§ãããã³ããšã³ãã¹ããªãŒãã³ã°ã¢ããªã±ãŒã·ã§ã³ã§ããŒã¿ãããŒã广çã«ç®¡çããäžçäžã®ãŠãŒã¶ãŒã«ãå¿çæ§ãé«ããä¿¡é Œæ§ãé«ããæ¥œãããšã¯ã¹ããªãšã³ã¹ãäœæã§ããŸãã